<?php

namespace app\api\controller;

use app\admin\model\Subscribe;
use app\common\controller\Api;
use think\Db;
use think\Exception;

/**
 * 定时任务接口
 */
class Cron extends Api
{

    //如果$noNeedLogin为空表示所有接口都需要登录才能请求
    //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
    //如果接口已经设置无需登录,那也就无需鉴权了
    //
    // 无需登录的接口,*表示全部
    protected $noNeedLogin = ['*'];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = ['*'];


    /*
     * 每天定时解锁认购期间的代币
     *
     * */
    public function chip_release()
    {
        $pre_percent = 0.02;    //  晚点可以定义为配置项

        $time = time();
        $today_time = strtotime(date('Y-m-d')); //  今天0点时间戳

        //  先查询出来需要解锁的用户
        $user_where = [
            'cloud_money_release'   =>  ['>' ,  0],
            'last_release_time'     =>  ['<' ,  $today_time],
        ];
        $user_field = 'id,cloud_money,cloud_money_release,cloud_money_released,last_release_time';
        $user_list = db('user')
            ->field($user_field)
            ->where($user_where)
            ->limit(1,10)
            ->select();

        //  遍历处理所有的用户数据
        foreach ($user_list as $us)
        {
            $uid = intval($us['id']);   //  待处理的用户id
            $cloud_release = round($pre_percent * floatval($us['cloud_money_release'] + $us['cloud_money_released']),4);    //  待释放的云币数量

            //  用户更新数据
            $user_update_data = [
                'cloud_money'           =>  $us['cloud_money'] + $cloud_release,
                'cloud_money_release'   =>  $us['cloud_money_release'] - $cloud_release,
                'cloud_money_released'  =>  $us['cloud_money_released'] + $cloud_release,
                'last_release_time'     =>  $time
            ];

            //  交易记录数据
            $order_insert_data = [
                'order_id'  =>  generate_order_id($uid),
                'owner_id'  =>  0,
                'user_id'   =>  $uid,
                'cash'      =>  0,
                'coin'      =>  $cloud_release,
                'detail'    =>  '云币解冻',
                'type'      =>  config('OrderType.Other'),
                'status'    =>  config('PayStatus.Finished'),
                'pay_manner'=>  0,
                'time'      =>  $time
            ];

            //  事务提交
            Db::startTrans();
            try{
                Db::name('user')->where('id','=',$uid)->update($user_update_data);
                Db::name('order')->insert($order_insert_data);
                Db::commit();
            }catch (Exception $e){
                Db::rollback();
            }
        }
        //  写入日志完成提交
        $result = ['user_list' => $user_list,'time' => '解锁代币时间：'.date('Y-m-d H:i:s',$time)];
        trace($result,'info');
        $this->success($result);
    }









    /**
     * 无需登录的接口
     * 
     */
    public function test1()
    {
        $this->success('返回成功', ['action' => 'test1']);
    }

    /**
     * 需要登录的接口
     * 
     */
    public function test2()
    {
        $this->success('返回成功', ['action' => 'test2']);
    }

    /**
     * 需要登录且需要验证有相应组的权限
     * 
     */
    public function test3()
    {
        $this->success('返回成功', ['action' => 'test3']);
    }

}
